package com.ym.b2b.order;

import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.ym.b2b.cache.configcache.WebAppConfig;
import com.ym.b2b.commons.exception.BaseException;
import com.ym.b2b.order.dao.EmSOrderConfirmItemDao;
import com.ym.b2b.order.sqlbean.EmSOrderConfirmItem;
import com.ym.b2b.order.vo.OrderInfoVO;
import com.ym.b2b.order.xc.XcService;
import com.zc.commons.base.Result;
import com.zc.commons.service.ZcService;

@Service("defaultTradeRequest")
public class DefaultTradeRequestImpl extends ZcService implements TradeRequest {

    @Autowired
    private EmSOrderConfirmItemDao emSOrderItemDao;

    @Autowired
    private XcService              xcService;

    /**
     * 下单接口, 必须
     */
    public Result bookingErpOrder(OrderInfoVO vo, List<EmSOrderConfirmItem> list) throws BaseException { 
        Result ret = new Result();
        String nowCase = WebAppConfig.getConfigMap().get("CURRENT_USE") == null ? "" : WebAppConfig.getConfigMap().get("CURRENT_USE").toString();
        if (!"".equals(nowCase)) {
            logger.info("\n ######ERP 下单节点,当前对接系统：" + nowCase + " (XC=宣城医药在线)");
        	logger.info(" ------bookingErpOrder传入的订单数据vo: \n" + JSON.toJSONString(vo));
        	logger.info(" ------bookingErpOrder传入的订单数据list: \n" + JSON.toJSONString(list));
            if (nowCase.equals("XC")) { // 宣城医药在线
                if (isDo()) { // 在application_config.xml中控制判断是否对接ERP下单
                    logger.info(" ------宣城医药在线下单开始");
                    ret = xcService.dealOrder(vo);
                }
            }
        }
        return ret;
    }
   
    /**
     * 支付接口 通知ERP系统 支付成功 没做
     */
    @Override
    public Result payErpOrder() throws BaseException {
        // TODO Auto-generated method stub
        return null;
    }

    /**
     * 没做
     */
    @Override
    public Result completeErpOrder() throws BaseException {
        // TODO Auto-generated method stub
        return null;
    }

    /**
     * 没做退货接口
     */
    @Override
    public Result saleReturnErpOrder() throws BaseException {
        // TODO Auto-generated method stub
        return null;
    }

    /**
     * 更新订单,必须
     */
    @Override
    public void updateOrder(OrderInfoVO vo, List<EmSOrderConfirmItem> list) throws BaseException {
        String nowCase = WebAppConfig.getConfigMap().get("CURRENT_USE") == null ? "" : WebAppConfig.getConfigMap().get("CURRENT_USE").toString();
        if (!"".equals(nowCase)) {
            logger.info("\n ######当前对接系统：" + nowCase + " (TX=宣城医药在线)");
            logger.info(" ------updateOrder传入的订单数据vo: \n" + JSON.toJSONString(vo));
        	logger.info(" ------updateOrder传入的订单数据list: \n" + JSON.toJSONString(list));
            if (nowCase.equals("XC")) { // 宣城医药在线
                if (isDo()) {
                    logger.info(" ------宣城医药在线更新订单开始");
                    xcService.updateOrder(vo,list);
                }
            }
        }

    }

    /**
     * 取消订单接口,必须
     */
    @Override
    public Result cancelOrder(OrderInfoVO vo) throws BaseException, SQLException {
        Result ret = new Result();
        String nowCase = WebAppConfig.getConfigMap().get("CURRENT_USE") == null ? "" : WebAppConfig.getConfigMap().get("CURRENT_USE").toString();
        if (!"".equals(nowCase)) {
            logger.info("\n ######ERP 取消订单节点,当前对接系统：" + nowCase + " (XC=宣城医药在线)");
        	logger.info(" ------cancelOrder传入的订单数据vo: \n" + JSON.toJSONString(vo));
            if (nowCase.equals("XC")) { // 宣城医药在线
                if (isDo()) { // 在application_config.xml中控制判断是否对接ERP下单
                    logger.info(" ------宣城医药在线取消订单开始");
                    ret = xcService.cancelOrder(vo);
                }
            }
        }
        return ret;
    }

    /**
     * 是否调用ERP接口开关
     */
    private boolean isDo() {
        if (null != WebAppConfig.getConfigMapServiceRouter().get("DO_ERP_ORDER") && "true".equals(WebAppConfig.getConfigMapServiceRouter().get("DO_ERP_ORDER"))) {
            return true;
        } else {
            return false;
        }
    }
    
    /**
     * 	B2B确认订单时是否进行ERP下单   ;
     *  ture 则在确认时下单	-- 更新订单时,同样需要更新ERP;
     *  false 则在支付后下单 	-- 更新订单时,不需要更新ERP;
     */
    public static boolean isBooking() {
        if (null != WebAppConfig.getConfigMapServiceRouter().get("BOOKING_ERP_ORDER") && "true".equals(WebAppConfig.getConfigMapServiceRouter().get("BOOKING_ERP_ORDER"))) {
            return true;
        } else {
            return false;
        }
    }
    

}
